<?php


use Yaf\Registry;
use models\Business\Coupon;
use models\Business\Booking;
use models\Exception\Business\BookingException;
use models\Business\AliPay;

class AliPayController extends ApiBaseController
{
    public function fundTransOrderChangedAction() {
        // 转账到支付宝账户的转账单据状态变更通知接口
    }

    /**
     * 支付宝异步回调
     * @return bool
     */
    public function tradeStatusSyncAction() {
        // 读取并将参数记录到日志中
        $parameters = Registry::get('parameters');
        Registry::get('notify_log')->info('支付宝异步回调参数: ' . json_encode($parameters));

        $response_stats = 'error';
        try {
            // 验签+读取异步回调参数
            $parameters = AliPay::alipayNotify($parameters);

            // 交易状态说明与通知触发条件
            // WAIT_BUYER_PAY => 交易创建，等待买家付款，触发通知 => 触发条件: 交易完成
            // TRADE_CLOSED => 未付款交易超时关闭，或支付完成后全额退款，触发通知 => 触发条件: 支付成功
            // TRADE_SUCCESS => 交易支付成功，不触发通知
            // TRADE_FINISHED => 交易结束，不可退款，触发通知 => 触发条件: 交易关闭
            // 当前业务逻辑下，只需判断TRADE_SUCCESS的情况
            if ($parameters['trade_status'] === 'TRADE_SUCCESS')
                // 查询订单是否存在 + 修改booking订单状态 + 将booking从wait4pay队列中删除 + 将booking数据添加到paid队列
                $response_stats = Booking::handlerNotifyByBookingSn($parameters['out_trade_no'], $parameters['trade_no'], 1);

            return $this->_responseString($response_stats);
        } catch (Exception $e) {
            Registry::get('notify_log')->err("支付宝异步回调报错: " . $e->getMessage());
            return $this->_responseString($response_stats);
        }
    }

}
